Skip to content

Conversation

@maranicolae
Copy link
Owner

@maranicolae maranicolae commented Apr 17, 2022

Laborator 7

Exercițiul 1

Am înregistrat block device-ul folosind register_blkdev cu MY_BLOCK_MAJOR valoarea 240. Observăm rezultatul prin comanda:

root@qemux86:~# cat /proc/devices | grep 240
240 mybdev

Modificând valoarea majorului cu 7, observăm că inserarea modulului eșuează.

register_blkdev: cannot get major 7 for mybdev
unable to register mybdev block device
insmod: can't insert 'skels/block_device_drivers/1-2-3-6-ram-disk/kernel/ram-disk.ko': Device or resource busy

Exercițiul 2

Am instanțiat un block device și în funcția ce se ocupa de tratarea request-urilor am afișat diverse informații ale structurii rq. În cazul în care request-ul nu vine de la file system, acesta va fi ignorat.

Request received:
Start of sector: 0
Total size: 4096
Direction: 0
Request received:
Start of sector: 0
Total size: 4096
Direction: 1

Exercițiul 3

Apelând funcția my_block_transfer vom verifica dacă prin variabila dir se indică direcția de scriere sau citire. În cazul în care aceasta are valoarea 0 (citire) se vor copia len bytes din zona de memorie, dev->data în buffer, altfel în cazul unei scrieri se va face operația inversă.

Exercițiul 4

Am deschis block device-ul după numele/path-ul acestuia folosind blkdev_get_by_path. Apoi am completat câmpurile structurii bio:

  • câmpul pentru bdev
  • câmpul pentry sector
  • câmpul pentru direcție (REQ_OP_READ)

Structura completată a fost submisa către subsistemul I/O pentru asociere cu funcția submit_bio_wait având garanția că procesarea structurii a fost finalizata la finalul apelului. După aceea am afișat primii trei bytes din buffer.

Observăm că outputul este cel așteptat:

./test-relay-disk
Name: /dev/vdb
61      62      63
read from /dev/vdb: 61 62 63

❗ În laborator, în ultimul paragraf al secțiunii Initialize a struct bio structure este un typo: "the size of the bufer."

Exercițiul 5

Asemănător cu exercițiul anterior, de această dată am setat direcția pe REQ_OP_WRITE în cazul în care parametrul formal dir indică o scriere.

Exercițiul 6

Spre deosebire de implementarea trecută, acum se iterează prin toalitatea segmentelor structurii bio. Pentru fiecare buffer se va apela my_block_transfer care va efectua operația de citire/scriere în funcție de valoarea variabilei dir.

Signed-off-by: Mara-Ioana Nicolae <maraioana9967@gmail.com>
Signed-off-by: Mara <maraioana9967@gmail.com>
Signed-off-by: Mara <maraioana9967@gmail.com>
Signed-off-by: Mara <maraioana9967@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant